home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
system
/
sysprof3.zip
/
MNDLBROT.C
< prev
next >
Wrap
C/C++ Source or Header
|
1989-01-23
|
2KB
|
110 lines
#include "stdio.h"
#include "conio.h"
#include "dos.h"
#define sqr(x) (x*x)
#define MAXCOL 319
#define MAXROW 199
#define MAXCOLORS 4
int max_iterations = 16;
double max_size = 4.0;
/* FUNCTION PROTOTYPES */
void main(int,char *[]);
void mandelbrot(double,double,double,double);
void draw_point(int,int,int);
void set_mode(int);
void print_screen(void);
void main ( argc , argv )
int argc;
char *argv[];
{
set_mode(0x4);
mandelbrot(2.0,-2.0,2.0,-2.0);
getch(); /* LET THE USER GET THE PRINTER READY. */
print_screen();
getch(); /* DON'T CLEAR THE SCREEN UNTIL HE'S READY. */
} /* END OF MAIN */
void mandelbrot ( pmax , pmin , qmax , qmin )
double pmax;
double pmin;
double qmax;
double qmin;
{
int color , row , col;
double p , q , modulus , deltaq , deltap;
double xcur , xlast , ycur , ylast;
deltap = (pmax-pmin)/(MAXCOL-1);
deltaq = (qmax-qmin)/(MAXROW-1);
for (col = 0; col <= MAXCOL; col++)
for (row = 0; row <= MAXROW; row++)
{
p = pmin+col*deltap;
q = qmin+row*deltaq;
xlast = ylast = modulus = 0.0;
color = 0;
while ((modulus < max_size) && (color < max_iterations))
{
xcur = sqr(xlast) - sqr(ylast) + p;
ycur = 2*xlast*ylast+q;
color++;
xlast = xcur;
ylast = ycur;
modulus = sqr(xcur)+sqr(ycur);
}
draw_point(col,row,color%MAXCOLORS);
}
return;
} /* END OF MANDELBROT */
void draw_point( col , row , color)
int col;
int row;
int color;
{
union REGS registers;
registers.x.dx = row;
registers.x.cx = col;
registers.h.al = (unsigned char)color;
registers.h.ah = 0x0C;
int86(0x10,®isters,®isters);
return;
}
void set_mode ( mode )
int mode;
{
union REGS registers;
registers.h.ah = 0;
registers.h.al = (unsigned char)mode;
int86(0x10,®isters,®isters);
return;
}
void print_screen ( )
{
union REGS registers;
int86(0x05,®isters,®isters);
return;
}